import request from '@/utils/request';
import type { BaseTreeModel, ResponseBaseData, QueryParamModel } from '@/api/model/baseModel';
import { download } from '@/utils/download-util';
import type { downloadParam } from '@/utils/download-util';

export const basePath = '/appsys/org/OrgRest';
/** 多组织表 */
export interface SysOrgDto extends BaseTreeModel {
  /** 上级组织 */
  parentOrgId?: string;
  /** 组织编码 */
  orgCode?: string;
  /** 组织名称 */
  orgName?: string;
  /** 排序编号 */
  orderBy?: number;
  /** 邮编 */
  post?: string;
  /** 手机号码 */
  tel?: string;
  /** 传真 */
  fax?: string;
  /** 邮箱 */
  email?: string;
  /** 办公地点 */
  orgPlace?: string;
  /** 是否有效 */
  validFlag?: string;
  /** 组织应用 */
  isMulOrg?: string;
  /** 描述 */
  orgDesc?: string;
}

/**
 * 获取表单数据
 * @param id 表单id
 * @returns 表单数据
 */
export function getSysOrg(id: string): Promise<ResponseBaseData<SysOrgDto>> {
  return request.get(`${basePath}/get/${id}/v1`);
}

/**
 * 保存表单数据
 * @param form 表单数据
 * @param parentType 保存类型: org、dept
 * @returns 保存结果
 */
export function saveSysOrg(form: SysOrgDto, parentType: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/save/v1?parentType=${parentType}`, form);
}

/**
 * 根据id集合删除数据
 * @param param 要删除的数据的id集合
 * @returns 删除结果
 */
export function delSysOrg(param: object[]): Promise<ResponseBaseData<any>> {
  return request.delete(`${basePath}/deleteByIds/v1`, { data: param });
}

/**
 * 保存排序
 * @param param 保存内容
 * @returns 保存结果
 */
export function saveSort(param: object[]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/updateOrderBys/v1`, param);
}

/**
 * 下载模版
 * @param importType 下载模板类型：org、dept
 * @returns 模板文件
 */
export function downloadFile(importType: string) {
  const downloadDto = {
    url: `/appsys/excelimport/ExcelImportRest/download/template/v1/${importType}`,
    data: null,
    method: 'get'
  } as downloadParam;
  return download(downloadDto);
}

/**
 * 获取导入结果列表
 * @param param 分页
 * @param importType 获取导入的类型：org、dept
 * @returns 导入结果列表数据
 */
export function getImportList(param: QueryParamModel, importType: string): Promise<ResponseBaseData<any>> {
  return request.post(`/appsys/excelimport/ExcelImportRest/result/v1/${importType}`, param);
}

/**
 * 下载错误文件
 * @param id 下载行的id
 * @param fileUrl 错误文件url
 * @returns 下载结果
 */
export function downloadErrorFile(id: string, fileUrl: string) {
  const downloadDto = {
    url: `/appsys/excelimport/ExcelImportRest/download/errorFile/v1/${id}?fileName=${fileUrl}`,
    data: null,
    method: 'get'
  } as downloadParam;
  return download(downloadDto);
}

/**
 * 获取分页数据
 * @param param 分页查询条件
 * @returns 获取分页数据
 */
export function listSysOrgByPage(param: QueryParamModel): Promise<ResponseBaseData<SysOrgDto>> {
  return request.post(`${basePath}/search-by-page/v1`, param);
}
